home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / asxsrc.arc / LKLEX.C < prev    next >
C/C++ Source or Header  |  1989-08-25  |  3KB  |  208 lines

  1. /* lklex.c */
  2.  
  3. /*
  4.  * (C) Copyright 1989
  5.  * All Rights Reserved
  6.  *
  7.  * Alan R. Baldwin
  8.  * 721 Berkeley St.
  9.  * Kent, Ohio  44240
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include "aslink.h"
  14.  
  15. VOID
  16. getid(id, c)
  17. register c;
  18. char *id;
  19. {
  20.     register char *p;
  21.  
  22.     if (c < 0) {
  23.         c = getnb();
  24.     }
  25.     p = id;
  26.     do {
  27.         if (p < &id[NCPS])
  28.             *p++ = c;
  29.     } while (ctype[c=get()]==LETTER || ctype[c]==DIGIT);
  30.     unget(c);
  31.     while (p < &id[NCPS])
  32.         *p++ = 0;
  33. }
  34.  
  35. VOID
  36. getfid(str, c)
  37. register c;
  38. char *str;
  39. {
  40.     register char *p;
  41.  
  42.     if (c < 0)
  43.         c = getnb();
  44.     p = str;
  45.     while (ctype[c] == LETTER || ctype[c] == DIGIT || c == ':') {
  46.         if (p < &str[FILSPC-1])
  47.             *p++ = c;
  48.         c = get();
  49.     }
  50.     unget(c);
  51.     while (p < &str[FILSPC])
  52.         *p++ = 0;
  53. }
  54.  
  55. char
  56. getnb()
  57. {
  58.     register c;
  59.  
  60.     while ((c=get())==' ' || c=='\t')
  61.         ;
  62.     return (c);
  63. }
  64.  
  65. VOID
  66. skip(c)
  67. register c;
  68. {
  69.     if (c < 0)
  70.         c = getnb();
  71.     while (ctype[c=get()]==LETTER || ctype[c]==DIGIT);
  72.     unget(c);
  73. }
  74.  
  75. char
  76. get()
  77. {
  78.     register c;
  79.  
  80.     if ((c = *ip) != 0)
  81.         ++ip;
  82.     return (c);
  83. }
  84.  
  85. VOID
  86. unget(c)
  87. {
  88.     if (c != 0)
  89.         --ip;
  90. }
  91.  
  92. char
  93. getmap(d)
  94. {
  95.     register c, n, v;
  96.  
  97.     if ((c = get()) == '\0')
  98.         return (-1);
  99.     if (c == d)
  100.         return (-1);
  101.     if (c == '\\') {
  102.         c = get();
  103.         switch (c) {
  104.  
  105.         case 'b':
  106.             c = '\b';
  107.             break;
  108.  
  109.         case 'f':
  110.             c = '\f';
  111.             break;
  112.  
  113.         case 'n':
  114.             c = '\n';
  115.             break;
  116.  
  117.         case 'r':
  118.             c = '\r';
  119.             break;
  120.  
  121.         case 't':
  122.             c = '\t';
  123.             break;
  124.  
  125.         case '0':
  126.         case '1':
  127.         case '2':
  128.         case '3':
  129.         case '4':
  130.         case '5':
  131.         case '6':
  132.         case '7':
  133.             n = 0;
  134.             v = 0;
  135.             while (++n<=3 && c>='0' && c<='7') {
  136.                 v = (v<<3) + c - '0';
  137.                 c = get();
  138.             }
  139.             unget(c);
  140.             c = v;
  141.             break;
  142.         }
  143.     }
  144.     return (c);
  145. }
  146.  
  147. int
  148. getline()
  149. {
  150.     register ftype;
  151.     register char *fid;
  152.  
  153. loop:    if (pflag && cfp && cfp->f_type == F_STD)
  154.         fprintf(stdout, "aslink >> ");
  155.  
  156.     if (sfp == NULL || fgets(ib, sizeof ib, sfp) == NULL) {
  157.         if (sfp) {
  158.             fclose(sfp);
  159.         }
  160.         if (cfp == NULL) {
  161.             cfp = filep;
  162.         } else {
  163.             cfp = cfp->f_flp;
  164.         }
  165.         if (cfp) {
  166.             ftype = cfp->f_type;
  167.             fid = cfp->f_idp;
  168.             if (ftype == F_STD) {
  169.                 sfp = stdin;
  170.             } else
  171.             if (ftype == F_LNK) {
  172.                 sfp = afile(fid, "lnk", 0);
  173.             } else
  174.             if (ftype == F_REL) {
  175.                 sfp = afile(fid, "rel", 0);
  176.             } else {
  177.                 fprintf(stderr, "Invalid file type\n");
  178.                 exit(1);
  179.             }
  180.             goto loop;
  181.         } else {
  182.             filep = NULL;
  183.             return(0);
  184.         }
  185.     }
  186.     ib[strlen(ib) - 1] = 0;
  187.     return (1);
  188. }
  189.  
  190. int
  191. more()
  192. {
  193.     register c;
  194.  
  195.     c = getnb();
  196.     unget(c);
  197.     return( (c == '\0' || c == ';') ? 0 : 1 );
  198. }
  199.  
  200. char
  201. endline()
  202. {
  203.     register c;
  204.  
  205.     c = getnb();
  206.     return( (c == '\0' || c == ';') ? 0 : c );
  207. }
  208.